11  Pakiety ggplot2 i gapminder. Podstawy animacji

Grzegorz Kończak

11.1 📘 Załadowanie pakietów i podstawowe informacje o zbiorze gapminder

11.1.1 ❕ Załadowanie wymaganych pakietów

library(ggplot2)
library(dplyr)
library(gapminder)

11.1.2 ️✔️️Dla konstrukcji wykresów w tej części wykorzystan* zbiór gapminderz pakietu gapminder

🔗 Opis zbioru gapminder

11.1.3 Informacja o zbiorze gapminder

summary(gapminder)
        country        continent        year         lifeExp     
 Afghanistan:  12   Africa  :624   Min.   :1952   Min.   :23.60  
 Albania    :  12   Americas:300   1st Qu.:1966   1st Qu.:48.20  
 Algeria    :  12   Asia    :396   Median :1980   Median :60.71  
 Angola     :  12   Europe  :360   Mean   :1980   Mean   :59.47  
 Argentina  :  12   Oceania : 24   3rd Qu.:1993   3rd Qu.:70.85  
 Australia  :  12                  Max.   :2007   Max.   :82.60  
 (Other)    :1632                                                
      pop              gdpPercap       
 Min.   :6.001e+04   Min.   :   241.2  
 1st Qu.:2.794e+06   1st Qu.:  1202.1  
 Median :7.024e+06   Median :  3531.8  
 Mean   :2.960e+07   Mean   :  7215.3  
 3rd Qu.:1.959e+07   3rd Qu.:  9325.5  
 Max.   :1.319e+09   Max.   :113523.1  
                                       

11.1.4 Informacja o zbiorze w tabeli

table(gapminder$continent, gapminder$year)
          
           1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 2002 2007
  Africa     52   52   52   52   52   52   52   52   52   52   52   52
  Americas   25   25   25   25   25   25   25   25   25   25   25   25
  Asia       33   33   33   33   33   33   33   33   33   33   33   33
  Europe     30   30   30   30   30   30   30   30   30   30   30   30
  Oceania     2    2    2    2    2    2    2    2    2    2    2    2

11.2 📘 Wybrane wykresy dla danych ze zbioru ‘gapminder’

11.2.1 ️️✔️ Wykresy przedstawiają jednocześnie dane z wielu różnych lat

11.2.2 ️️✔️ Do konstrukcji wykresów w tej części wykorzystano dostępny w R zbiór gapminder

11.2.3 Wykres słupkowy - podstawowa konstrukcja

ggplot(gapminder, aes(x=continent)) + geom_bar()

11.2.4 Wykres słupkowy - dodanie kolorów

ggplot(gapminder, aes(x=continent, fill=continent)) + geom_bar()

11.2.5 Wykres słupkowy - dodanie etykiety legendy

ggplot(gapminder, aes(x=continent, fill=continent)) + geom_bar()+labs(fill='Kontynent')

11.2.6 Wykres słupkowy - usunięcie legendy

ggplot(gapminder, aes(x=continent, fill=continent)) + geom_bar()+guides(fill='none')

11.2.7 Wykres zapamiętany w obiekcie rys

rys=ggplot(gapminder, aes(x=continent, fill=continent)) + geom_bar()+guides(fill='none')

11.2.8 Wykres słupkowy - transformacja skali

rys + coord_trans(y="sqrt")

11.2.9 Wykres słupkowy - współrzędne biegunowe

rys + coord_polar()

11.2.10 Wykres słupkowy - poziomy

rys+coord_flip()

11.2.11 Wybrane państwa - wykres liniowy

kraje <- c("Poland", "Germany", "Czech Republic", "Austria","Romania")
ggplot(subset(gapminder, country %in% kraje),
       aes(x = year, y = lifeExp, color = country)) + geom_line() + geom_point()+
    theme(legend.position='bottom') ####

11.2.12 Wykres gęstości

ggplot(gapminder, aes(lifeExp)) + 
    geom_density()

11.2.13 Wykres gęstości z dodatkowymi parametrami

ggplot(gapminder, aes(lifeExp)) + 
    geom_density(linewidth=1.5, fill="blue", alpha=0.6)

11.2.14 Histogram

ggplot(gapminder, aes(lifeExp)) + 
geom_histogram( binwidth=4, color="black", fill="lightblue", alpha=0.5)

11.2.15 Histogram i gęstość

ggplot(gapminder, aes(lifeExp)) + 
geom_histogram(aes(y=after_stat(density)), binwidth=4, color="black", fill="lightblue", alpha=0.5)+
  geom_density()

11.2.16 Histogram i gęstość - dodatkowe parametry

ggplot(data=gapminder, aes(x=lifeExp)) + 
    geom_histogram(aes(y=after_stat(density)), binwidth=4, color="black", fill="lightblue", alpha=0.5)+
    geom_density(linewidth=1.5, fill="pink", alpha=0.2) 

11.2.17 Gęstości dla poszczególnych kontynentów

ggplot(data=gapminder, aes(x=lifeExp, fill=continent)) +
    geom_density(alpha=0.3)

11.2.18 Utworzenie obiektu rys1

rys1 <- ggplot(gapminder, aes(continent, lifeExp, fill=continent))

11.2.19 Wyświetlenie obiektu rys1 z reprezentacją graficzną boxplot

rys1 +
    geom_boxplot(outlier.size=2)

11.2.20 Wyświetlenie obiektu rys1 z reprezentacją graficzną violin

rys1 +
  geom_violin()

11.2.21 Konstrukcja i wyświetlenie obiektu rys2

rys2 <- ggplot(data=gapminder,
              aes(x=gdpPercap, y=lifeExp))
rys2

11.2.22 Wyświetlenie obiektu rys2 z reprezentacją graficzną point

11.2.23 UWAGA: na wykresie zamieszczono jednocześnie dane z różnych lat

rys2 + geom_point()

11.2.24 Wyświetlenie obiektu rys2 z reprezentacją graficzną point i kolorami dla kontynentów

rys2 + geom_point(aes(color=continent))

11.2.25 Wyświetlenie obiektu rys2 z reprezentacją graficzną violin, kolorami dla kontynentów w oddzielnych oknach

rys2+
  geom_point(aes(color=continent)) + 
  facet_grid(year~continent)

11.3 📘 Animacje w ggplot2 - pakiet gganimation

11.3.1 ❕ Załadowanie bibliotek dla animacji

library(gganimate)
library(gifski)

11.3.2 Utworzenie obiektu p

p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, colour = country)) +
  geom_point(alpha = 0.7) +
  theme(legend.position = 'none') +
  labs(title = 'Rok: {frame_time}', x = 'PKB na osobę', y = 'oczekiwana długość życia') +
  transition_time(year)

11.3.3 Wyświetlenie obiektu p

p

11.3.4 Utworzenie obiektu p

p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, colour = country)) +
  geom_point(alpha = 0.7) +
  theme(legend.position = 'none') +
  facet_wrap(~continent) +
  labs(title = 'Rok: {frame_time}', x = 'PKB na osobę', y = 'oczekiwana długość życia') +
  transition_time(year)

11.3.5 Wyświetlenie obiektu p

p

11.3.6 Uruchomienie animacji

animate(p, 100, 10)

11.3.7 Uruchomienie animacji z parametrami

animate(p, nframes=100, fps=10,height = 20, width = 30, units = "cm",res=150)

11.3.8 Animacja - określenie różnych parametrów

p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, colour = country)) +
  geom_point(alpha = 0.7) +
  theme(legend.position = 'none') +
  facet_wrap(~continent) +
  labs(title = 'Rok: {frame_time}', x = 'PKB na osobę', y = 'oczekiwana długość życia') +
  transition_time(year)+
  scale_colour_manual(values = country_colors) +
  scale_size(range = c(2, 12)) +
  scale_x_log10() +
  facet_wrap(~continent) +
  theme(legend.position = 'none') +
  labs(title = 'Year: {frame_time}', x = 'GDP per capita', y = 'life expectancy') +
  transition_time(year) +
  ease_aes('linear')
p

11.4 📘 Zapisanie animacji w pliku gif i wyświetlenie w zewnętrznym oknie

makeplot <- function(){
  datalist <- split(gapminder, gapminder$year)
  lapply(datalist, function(data){
    p <- ggplot(data, aes(gdpPercap, lifeExp, size = pop, color = continent)) +
      scale_size("population", limits = range(gapminder$pop)) + geom_point() + ylim(20, 90) +
      scale_x_log10(limits = range(gapminder$gdpPercap)) + ggtitle(data$year) + theme_classic()
    print(p)
  })
}
gif_file <- file.path(tempdir(), 'gapminder.gif')
save_gif(makeplot(), gif_file, 1280, 720, res = 144)
utils::browseURL(gif_file)